package com.qfedu.user.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qfedu.common.Md5;
import com.qfedu.common.R;
import com.qfedu.security.HasPermission;
import com.qfedu.user.dto.PasswordDto;
import com.qfedu.user.dto.StateDto;
import com.qfedu.user.dto.UserDto;
import com.qfedu.user.pojo.User;
import com.qfedu.user.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

//在企业开发中，日志分页业务日志和操作日志，还有登陆日志
//登陆日志只是针对登陆这个行为做的日志
//业务日志指的是业务层方法执行的日志记录
//操作日志指的是控制层方法执行的日志记录

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    //注解用在这里并不是直接就生效了，注解的本质就只是一个标记，而这个标记需要解析才能生效
    @HasPermission("searchUser")
    @GetMapping
    public R<Page<User>> searchUsers(UserDto userDto){
        return R.ok(userService.getUsers(userDto));
    }


    @HasPermission("addUser")
    @PostMapping
    public R<Boolean> addUser(@RequestBody User user){
        user.setPassword(Md5.encrypt(user.getPassword()));
        return R.ok(userService.save(user));
    }

    @HasPermission("updateUser")
    @PutMapping
    public R<Boolean> updateUser(@RequestBody User user){
        return R.ok(userService.updateById(user));
    }

    @HasPermission("changeUserState")
    @PutMapping("/state")
    public R<Boolean> changeUserState(@RequestBody StateDto stateDto){
        return R.ok(userService.changeUserState(stateDto));
    }

    @PutMapping("/changePwd")
    public R<Boolean> changeUserPassword(@RequestBody PasswordDto passwordDto){
        return R.ok(userService.changeUserPassword(passwordDto));
    }

    @HasPermission("deleteUser")
    @DeleteMapping("/{username}")
    public R<Boolean> deleteUser(@PathVariable("username") String username){
        return R.ok(userService.removeById(username));
    }
}
